home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_11_07 / 1107049a < prev    next >
Text File  |  1993-04-28  |  5KB  |  212 lines

  1. /*
  2.      rcsutil.c
  3.      The Revision Control System
  4.  
  5.      Dwayne Phillips
  6.      November 1991
  7.  
  8.      This file contains functions that are used by
  9.      several of the RCS programs.  They are held here
  10.      to avoid having multiple copies of the same
  11.      function.
  12.  
  13.      create_rcs_file_name
  14.      rev_number
  15.      replace_slash
  16.      go_to_correct_rev
  17.      copy_rcs_to_source
  18.      copy_latest_rcs_to_source
  19.      get_header_lines
  20. */
  21.  
  22. #include "rcs.h"
  23.  
  24. /*
  25.    create_rcs_file_name(char source_name[],
  26.                        char rcs_name[])
  27. */
  28.  
  29. create_rcs_file_name(char *source_name, char *rcs_name)
  30. {
  31.    char *place, temp[80];
  32.    int  i, j, slash, slot;
  33.  
  34.    slash = 47;
  35.    place = strrchr(source_name, slash);
  36.    slash = 92;
  37.    if(place == '\0')
  38.          place = strrchr(source_name, slash);
  39.    if(place == '\0'){
  40.       strcpy(rcs_name, "RCS/v");
  41.       strcat(rcs_name, source_name);
  42.    }
  43.    else{
  44.       slot = place - source_name;
  45.       strncpy(temp, source_name, slot);
  46.       temp[slot] = '\0';
  47.       strcat(temp, "/RCS/v");
  48.       slot++;
  49.       j = strlen(temp);
  50.       for(i=slot; source_name[i]!='\0'; i++){
  51.          temp[j] = source_name[i];
  52.          j++;
  53.       }
  54.  
  55.       temp[j] = '\0';
  56.       strcpy(rcs_name, temp);
  57.    }
  58. }
  59.  
  60. /*
  61.    rev_number(char *string)
  62. */
  63.  
  64. rev_number(char *string)
  65. {
  66.    char  *new_string;
  67.    int   doit = 0, i, j, result;
  68.  
  69.    i = 0;
  70.    while(doit == 0){
  71.       j = string[i];
  72.       doit = isdigit(j);
  73.       i++;
  74.    }
  75.    i--;
  76.  
  77.    for(j=0; string[i] != '\0'; i++, j++)
  78.          new_string[j] = string[i];
  79.    result = atoi(new_string);
  80.    return(result);
  81.  
  82. }
  83.  
  84. /*
  85.    replace_slash(char string[])
  86. */
  87.  
  88. replace_slash(char string[])
  89. {
  90.    int  slash      = 47, back_slash = 92, i, j;
  91.  
  92.    j = strlen(string);
  93.    for(i=0; i<j; i++){
  94.       if(string[i] == slash) string[i] = back_slash;
  95.    }
  96. }
  97.  
  98. /*
  99.    go_to_correct_rev(FILE *rcs_file, int rev)
  100. */
  101.  
  102. go_to_correct_rev(FILE *rcs_file, int rev)
  103. {
  104.    char *result, string[80];
  105.    int  found_it = 0, new_rev, reading = 1, still_reading = 1;
  106.  
  107.    while(reading){ /* read file */
  108.       result = fgets(string, 80, rcs_file);
  109.       if( strncmp(string, FIRST_LINE, 5) == 0){
  110.          result = fgets(string, 80, rcs_file);
  111.          new_rev = atoi(string);
  112.          if(rev == new_rev){
  113.             while(still_reading){
  114.                result = fgets(string, 80, rcs_file);
  115.                if( strncmp(string, DELIMETER, 5) == 0){
  116.                   still_reading = 0;
  117.                   reading       = 0;
  118.                   found_it      = 1;
  119.                }  /* ends if DELIMETER */
  120.                if(result == '\0') still_reading = 0;
  121.             }  /* ends while still_reading */
  122.          }  /* ends if rev == new_rev */
  123.       }  /* ends if FIRST_LINE */
  124.       if(result == '\0') reading = 0;
  125.    } /* ends while reading */
  126.  
  127.    if(found_it == 0){
  128.       printf("\n\ncheckout.c> Did not find the"
  129.              " desired revision\n");
  130.       fclose(rcs_file);
  131.       exit(-5);
  132.    }
  133.  
  134. /*
  135.    copy_rcs_to_source(FILE *rcs_file, FILE *source_file)
  136. */
  137.  
  138. copy_rcs_to_source(FILE *rcs_file, FILE *source_file)
  139. {
  140.    char string[80];
  141.    int  reading = 1;
  142.  
  143.    while(reading){
  144.       fgets(string, 80, rcs_file);
  145.       if( strncmp(string, DELIMETER, 5) == 0)
  146.          reading = 0;
  147.       else
  148.          fputs(string, source_file);
  149.    }
  150. }
  151.  
  152. /*
  153.    copy_latest_rcs_to_source(FILE *rcs_file, FILE *source_file)
  154. */
  155.  
  156. copy_latest_rcs_to_source(FILE *rcs_file, FILE *source_file)
  157. {
  158.    char string[80];
  159.    int  reading = 1;
  160.  
  161.    while(reading){
  162.       fgets(string, 80, rcs_file);
  163.          if( strncmp(string, DELIMETER, 5) == 0){
  164.             while(reading){
  165.                fgets(string, 80, rcs_file);
  166.                   if(strncmp(string, DELIMETER, 5) == 0)
  167.                      reading = 0;
  168.                   else
  169.                      fputs(string, source_file);
  170.             } /* ends while reading */
  171.          }  /* ends if DELIMETER */
  172.    }  /* ends while reading */
  173. }
  174.  
  175. /*
  176.    get_header_lines(FILE *the_file, int version)
  177. */
  178.  
  179. get_header_lines(FILE *the_file, int version)
  180. {
  181.    char   string[80];
  182.    int    entering = 1;
  183.    time_t ltime;
  184.  
  185.    time(<ime);
  186.  
  187.    fputs(FIRST_LINE, the_file);
  188.    sprintf(string, "%d\n", version);
  189.    fputs(string, the_file);
  190.    sprintf(string, "%s", ctime(<ime));
  191.    fputs(string, the_file);
  192.  
  193.    printf("\n\nEnter your header lines");
  194.    printf("\nStop the header lines by entering");
  195.    printf("\na . on a line by itself.");
  196.    printf("\n");
  197.    while(entering){
  198.       printf(">>");
  199.       fgets(string, 80, stdin);
  200.       if(string[0] != '.')
  201.        fputs(string, the_file);
  202.       else
  203.        entering = 0;
  204.    } /* ends while entering */
  205.  
  206.    fputs(DELIMETER, the_file);
  207.  
  208. }
  209.  
  210.  
  211.